8
תגובות

מתודות רספ ב OOP

פתח nirbe ,
יש לי שאלה לגבי מתודות קסם.
האם יש מתודת קסם שמופעלת בסוף הרצת המחלקה?
ואם כן, מהי?

תודה!

8 תשובות

avatar ענה iiddaannyy ב 29 ליולי 2012 #

מה זאת אומרת "בסוף הרצת המחלקה"?
יש לך את destruct שמופעלת כשהורסים את המחלקה, אבל אני לא בטוח שלזה אתה מתכוון.

avatar ענה nirbe ב 29 ליולי 2012 #

זה אמור לפעול בדיוק באותה השנייה של יצירת המחלקה, אבל זה יהיה בסופה (ז"א, אולי יהיה הבדל של כמה מאיות השנייה, אבל לא נשים לב לזה).
אני יסביר למה אני רוצה את זה,
ב __constract אני מציג התחלה של סקריפט עם התג script
בפונקציות אני מציג את קוד הסקריפט עצמו (על ידי echo).
ואני רוצה לאחר מכן הסקריפט יסגר ישר.

אם יש אפשר להשתמש בתמתודת קסם שעובדת כאשר אני קורה לאיזה פונקציה במחלקה.

avatar ענה Y_Y ב 29 ליולי 2012 #

אני חושב שהכי הגיוני יהיה לשים את הסגירה של הסקריפט בסיום הקוד שלו או בפונציקה שהמחלקה תקרא לה בסיומה

avatar ענה nirbe ב 29 ליולי 2012 #

אבל יש פונקציות שמשתלבות ביחד, ז"א, פונקציה בתוך פונקציה.

$test->click($test->slide("bla"));


ש click זה פונקציה שמכילה בתוכה סקריפט וגם slide, ככה שאני לא יכול לסגור בסוף את הסקריפט כי יש עוד סקריפט.

אם אתם לא חושבים על דרך כזאתי, חשבתי אם אפשר להכניס מתודות ב class לתוך האורגומנט (או איך שלא אומרים את זה) במתודת construct ואז ככה יהיה אפשר להכניס את האורגומנט שנגיד הוא $value ולהציג אותו בין שתי תגיות הסקריפט.
ניסיתי לעשות את עם $this ועם השם של המופע וזה לא עבד...

avatar ענה intval ב 29 ליולי 2012 #

אין דבר כזה "סיום של מחלקה".
יש יצירה x = new bla
אבל אין באמת סיום. יש שלב ניקוי זיכרון, אבל לא באמת סיום.

הדרך הנכונה בשבילך לעשות את זה תהיה ליצור עוד פעולה, משהו כמו

$test->endscript()

שתהיה אחראית להוסיף את תגי הסגירה.

מכל זה נובע שהמפתח יצטרך לדעת על זה שצריך לקרוא לפעולה הזו.
זה לא הכי נוח, אבל אפשר לממש את זה בצורה הבאה:

<?php
class whatsoever
{
  private $endTagAdded = false;
  public function finish()
  {
    echo '</script>';
    $this->endTagAdded = true;
  }

  public function __destruct()
  {
    if(!$this->endTagAdded)
      throw new Exception("Hey, please call the finish() method");
  }
}


למרות שאני עדיין לא בטוח שזה הפתרון הכי טוב במקרה שלך
כי לא ידועים לי מקרי ודרכי השימוש של המחלקה

avatar ענה nirbe ב 29 ליולי 2012 #

ומה לגבי השאלה על המתודות בתוך המופע?
נגיד ויש לי class בשם test ומתודה בשם bla, האם אני יכול לעשות משהו כזה?

$i = new test($this->bla());

avatar ענה intval ב 29 ליולי 2012 #

טכנית - אתה יכול.
השאלה מה זה נותן לך.. המתכנת אמור להבין שלא צריך לסגור את הסקריפט לפני שהוא סיים לעשות הכל.

avatar ענה iiddaannyy ב 31 ליולי 2012 #

יש לי תחושה שבבנאי (construct) אתה מפעיל את כל המתודות שצריך. אם אני צודק, פשוט בסוף בפונקצית בנאי תקרא למתודה שתסגור את התג.